[VTPM] Make vTPM hotplug scripts use the UUID of the vTPM instance
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Tue, 17 Jul 2007 09:33:26 +0000 (10:33 +0100)
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Tue, 17 Jul 2007 09:33:26 +0000 (10:33 +0100)
Make the vTPM hotplug script use the UUID of the vTPM instance for
associating it with its instance number rather than the name of the
domain.
Also change the cleanup in the xm test to use the atexit mechanism
rather than explicitly calling a function to clean up.

Signed-off-by: Stefan Berger <stefanb@us.ibm.com>
12 files changed:
tools/examples/vtpm-common.sh
tools/python/xen/xend/XendDevices.py
tools/python/xen/xend/server/tpmif.py
tools/xm-test/tests/vtpm/01_vtpm-list_pos.py
tools/xm-test/tests/vtpm/02_vtpm-cat_pcrs.py
tools/xm-test/tests/vtpm/03_vtpm-susp_res.py
tools/xm-test/tests/vtpm/04_vtpm-loc_migr.py
tools/xm-test/tests/vtpm/05_vtpm-loc_migr.py
tools/xm-test/tests/vtpm/06_vtpm-susp_res_pcrs.py
tools/xm-test/tests/vtpm/07_vtpm-mig_pcrs.py
tools/xm-test/tests/vtpm/08_vtpm-mig_pcrs.py
tools/xm-test/tests/vtpm/vtpm_utils.py

index 8af4f321e98b64d261ab1cec3a9c46cc669b7f85..7f8512e72fe5a84818a857ddb10af596a4813a12 100644 (file)
@@ -20,7 +20,7 @@ dir=$(dirname "$0")
 . "$dir/logging.sh"
 . "$dir/locking.sh"
 
-VTPMDB="/etc/xen/vtpm.db"
+VTPMDB="/var/vtpm/vtpm.db"
 
 #In the vtpm-impl file some commands should be defined:
 #      vtpm_create, vtpm_setup, vtpm_start, etc. (see below)
@@ -241,12 +241,21 @@ function vtpm_get_create_reason () {
 # If no entry in the TPM database is found, the instance is
 # created and an entry added to the database.
 function vtpm_create_instance () {
-       local res instance domname reason
-       domname=$(xenstore_read "$XENBUS_PATH"/domain)
+       local res instance domname reason uuid
+       uuid=$(xenstore_read "$XENBUS_PATH"/uuid)
        reason=$(vtpm_get_create_reason)
 
        claim_lock vtpmdb
-       instance=$(vtpmdb_find_instance $domname)
+
+       instance="0"
+
+       if [ "$uuid" != "" ]; then
+               instance=$(vtpmdb_find_instance $uuid)
+       fi
+       if [ "$instance" == "0" ]; then
+               domname=$(xenstore_read "$XENBUS_PATH"/domain)
+               instance=$(vtpmdb_find_instance $domname)
+       fi
 
        if [ "$instance" == "0" -a "$reason" != "create" ]; then
                release_lock vtpmdb
@@ -268,7 +277,11 @@ function vtpm_create_instance () {
                vtpm_create $instance
 
                if [ $vtpm_fatal_error -eq 0 ]; then
-                       vtpmdb_add_instance $domname $instance
+                       if [ "$uuid" != "" ]; then
+                               vtpmdb_add_instance $uuid $instance
+                       else
+                               vtpmdb_add_instance $domname $instance
+                       fi
                fi
        else
                if [ "$reason" == "resume" ]; then
@@ -288,22 +301,29 @@ function vtpm_create_instance () {
 #Since it is assumed that the VM will appear again, the
 #entry is kept in the VTPMDB file.
 function vtpm_remove_instance () {
-       local instance reason domname
+       local instance reason domname uuid
        #Stop script execution quietly if path does not exist (anymore)
        xenstore-exists "$XENBUS_PATH"/domain
-       domname=$(xenstore_read "$XENBUS_PATH"/domain)
+       uuid=$(xenstore_read "$XENBUS_PATH"/uuid)
 
-       if [ "$domname" != "" ]; then
-               claim_lock vtpmdb
+       claim_lock vtpmdb
 
-               instance=$(vtpmdb_find_instance $domname)
+       instance="0"
 
-               if [ "$instance" != "0" ]; then
-                       vtpm_suspend $instance
-               fi
+       if [ "$uuid != "" ]; then
+               instance=$(vtpmdb_find_instance $uuid)
+       fi
 
-               release_lock vtpmdb
+       if [ "$instance == "0" ]; then
+               domname=$(xenstore_read "$XENBUS_PATH"/domain)
+               instance=$(vtpmdb_find_instance $domname)
        fi
+
+       if [ "$instance" != "0" ]; then
+               vtpm_suspend $instance
+       fi
+
+       release_lock vtpmdb
 }
 
 
index d4404a7aaafadc47c758b5f3d8edde911e2eab2f..70557855a16595150252dbe59630057dcbeae78d 100644 (file)
@@ -78,6 +78,7 @@ class XendDevices:
         @param domain: domain this controller is handling devices for.
         @type domain: XendDomainInfo
         """
-        tpmif.destroy_vtpmstate(domain.getName())
+        from xen.xend.XendLogging import log
+        tpmif.destroy_vtpmstate(domain.info.get('vtpm_refs'))
 
     destroy_device_state = classmethod(destroy_device_state)
index b977110a433e3a86f68b0878f715a10d363a48b8..db4b9f2c68b87d58907198c5eb4fc7594d778a96 100644 (file)
@@ -31,9 +31,10 @@ import re
 
 xoptions = XendOptions.instance()
 
-def destroy_vtpmstate(name):
+def destroy_vtpmstate(uuids):
     if os.path.exists(VTPM_DELETE_SCRIPT):
-        os.system(VTPM_DELETE_SCRIPT + " " + name)
+        for uuid in uuids:
+            os.system(VTPM_DELETE_SCRIPT + " " + uuid)
 
 class TPMifController(DevController):
     """TPM interface controller. Handles all TPM devices for a domain.
index a427bf2fdebe409dc6c5b66849d229bd5ebccf0a..dfd1227a0026125abe4265d7e9f7b54d64451b4d 100644 (file)
@@ -11,6 +11,7 @@ from XmTestLib import *
 from vtpm_utils import *
 import commands
 import os
+import atexit
 
 config = {"vtpm":"instance=1,backend=0"}
 domain = XmTestDomain(extraConfig=config)
@@ -23,18 +24,17 @@ except DomainError, e:
     vtpm_cleanup(domain.getName())
     FAIL("Unable to create domain")
 
+
 domName = domain.getName()
 
+atexit.register(vtpm_cleanup, vtpm_get_uuid(domid(domName)))
+
 status, output = traceCommand("xm vtpm-list %s" % domain.getId())
 eyecatcher = "/local/domain/0/backend/vtpm"
 where = output.find(eyecatcher)
 if status != 0:
-    vtpm_cleanup(domName)
     FAIL("xm vtpm-list returned bad status, expected 0, status is %i" % status)
 elif where < 0:
-    vtpm_cleanup(domName)
     FAIL("Fail to list virtual TPM device")
 
 domain.stop()
-
-vtpm_cleanup(domName)
index 62ecfb86bd44eef5ea5d60dc2e0a6745e1769d63..a18cbab2f77d260d52d44222cbe1f3fffeac8f9a 100644 (file)
@@ -11,6 +11,7 @@ from vtpm_utils import *
 import commands
 import os
 import os.path
+import atexit
 
 config = {"vtpm":"instance=1,backend=0"}
 domain = XmTestDomain(extraConfig=config)
@@ -21,32 +22,28 @@ try:
 except DomainError, e:
     if verbose:
         print e.extra
-    vtpm_cleanup(domName)
     FAIL("Unable to create domain (%s)" % domName)
 
+atexit.register(vtpm_cleanup, vtpm_get_uuid(domid(domName)))
+
 try:
     console.sendInput("input")
 except ConsoleError, e:
     saveLog(console.getHistory())
-    vtpm_cleanup(domName)
     FAIL(str(e))
 
 try:
     run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
 except ConsoleError, e:
     saveLog(console.getHistory())
-    vtpm_cleanup(domName)
     FAIL("No result from dumping the PCRs")
 
 if re.search("No such file",run["output"]):
-    vtpm_cleanup(domName)
     FAIL("TPM frontend support not compiled into (domU?) kernel")
 
 domain.closeConsole()
 
 domain.stop()
 
-vtpm_cleanup(domName)
-
 if not re.search("PCR-00:",run["output"]):
     FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side")
index 4740cdef188ea16f862952d35e8dfd6b5b7a6d79..b863f27494262ac9fcf1f5cb774b04508cfe2c02 100644 (file)
@@ -12,6 +12,7 @@ from vtpm_utils import *
 import commands
 import os
 import os.path
+import atexit
 
 config = {"vtpm":"instance=1,backend=0"}
 domain = XmTestDomain(extraConfig=config)
@@ -23,25 +24,23 @@ try:
 except DomainError, e:
     if verbose:
         print e.extra
-    vtpm_cleanup(domName)
     FAIL("Unable to create domain (%s)" % domName)
 
+atexit.register(vtpm_cleanup, vtpm_get_uuid(domid(domName)))
+
 try:
     console.sendInput("input")
 except ConsoleError, e:
     saveLog(console.getHistory())
-    vtpm_cleanup(domName)
     FAIL(str(e))
 
 try:
     run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
 except ConsoleError, e:
     saveLog(console.getHistory())
-    vtpm_cleanup(domName)
     FAIL("No result from dumping the PCRs")
 
 if re.search("No such file",run["output"]):
-    vtpm_cleanup(domName)
     FAIL("TPM frontend support not compiled into (domU?) kernel")
 
 consoleHistory = console.getHistory()
@@ -56,12 +55,10 @@ while loop < 3:
 
     except TimeoutError, e:
         saveLog(consoleHistory)
-        vtpm_cleanup(domName)
         FAIL(str(e))
 
     if status != 0:
         saveLog(consoleHistory)
-        vtpm_cleanup(domName)
         FAIL("xm save did not succeed")
 
     try:
@@ -71,32 +68,27 @@ while loop < 3:
     except TimeoutError, e:
         os.remove("%s.save" % domName)
         saveLog(consoleHistory)
-        vtpm_cleanup(domName)
         FAIL(str(e))
 
     os.remove("%s.save" % domName)
 
     if status != 0:
         saveLog(consoleHistory)
-        vtpm_cleanup(domName)
         FAIL("xm restore did not succeed")
 
     try:
         console = domain.getConsole()
     except ConsoleError, e:
-        vtpm_cleanup(domName)
         FAIL(str(e))
 
     try:
         run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
     except ConsoleError, e:
         saveLog(console.getHistory())
-        vtpm_cleanup(domName)
         FAIL(str(e))
 
     if not re.search("PCR-00:",run["output"]):
         saveLog(console.getHistory())
-        vtpm_cleanup(domName)
         FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side")
 
     loop += 1
@@ -105,5 +97,3 @@ domain.closeConsole()
 
 domain.stop()
 
-vtpm_cleanup(domName)
-
index 0a2f32cb535cb013b950d7758be3be1337b5a891..ccc8b7378257d381531303e6ab333e7efcb15931 100644 (file)
@@ -13,6 +13,7 @@ from vtpm_utils import *
 import commands
 import os
 import os.path
+import atexit
 
 config = {"vtpm":"instance=1,backend=0"}
 domain = XmTestDomain(extraConfig=config)
@@ -24,25 +25,23 @@ try:
 except DomainError, e:
     if verbose:
         print e.extra
-    vtpm_cleanup(domName)
     FAIL("Unable to create domain (%s)" % domName)
 
+atexit.register(vtpm_cleanup, vtpm_get_uuid(domid(domName)))
+
 try:
     console.sendInput("input")
 except ConsoleError, e:
     saveLog(console.getHistory())
-    vtpm_cleanup(domName)
     FAIL(str(e))
 
 try:
     run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
 except ConsoleError, e:
     saveLog(console.getHistory())
-    vtpm_cleanup(domName)
     FAIL("No result from dumping the PCRs")
 
 if re.search("No such file",run["output"]):
-    vtpm_cleanup(domName)
     FAIL("TPM frontend support not compiled into (domU?) kernel")
 
 consoleHistory = console.getHistory()
@@ -58,12 +57,10 @@ while loop < 3:
                                       timeout=90)
     except TimeoutError, e:
         saveLog(consoleHistory)
-        vtpm_cleanup(domName)
         FAIL(str(e))
 
     if status != 0:
         saveLog(consoleHistory)
-        vtpm_cleanup(domName)
         FAIL("xm migrate did not succeed. External device migration activated?")
 
 
@@ -71,26 +68,22 @@ while loop < 3:
     new_domid = domid(domName)
 
     if (old_domid == new_domid):
-        vtpm_cleanup(domName)
         FAIL("xm migrate failed, domain id is still %s (loop=%d)" %
              (old_domid,loop))
 
     try:
         console = domain.getConsole()
     except ConsoleError, e:
-        vtpm_cleanup(domName)
         FAIL(str(e))
 
     try:
         run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
     except ConsoleError, e:
         saveLog(console.getHistory())
-        vtpm_cleanup(domName)
         FAIL("No result from dumping the PCRs")
 
     if not re.search("PCR-00:",run["output"]):
         saveLog(console.getHistory())
-        vtpm_cleanup(domName)
         FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side")
 
     loop += 1
@@ -98,5 +91,3 @@ while loop < 3:
 domain.closeConsole()
 
 domain.stop()
-
-vtpm_cleanup(domName)
index 14102c7331f9659755b5ed5e03d929c5fbe6d089..57b87dfda8323c887a0c042ba0f12f03f05e77cf 100644 (file)
@@ -13,6 +13,7 @@ from vtpm_utils import *
 import commands
 import os
 import os.path
+import atexit
 
 config = {"vtpm":"instance=1,backend=0"}
 domain = XmTestDomain(extraConfig=config)
@@ -24,25 +25,23 @@ try:
 except DomainError, e:
     if verbose:
         print e.extra
-    vtpm_cleanup(domName)
     FAIL("Unable to create domain (%s)" % domName)
 
+atexit.register(vtpm_cleanup, vtpm_get_uuid(domid(domName)))
+
 try:
     console.sendInput("input")
 except ConsoleError, e:
     saveLog(console.getHistory())
-    vtpm_cleanup(domName)
     FAIL(str(e))
 
 try:
     run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
 except ConsoleError, e:
     saveLog(console.getHistory())
-    vtpm_cleanup(domName)
     FAIL("No result from dumping the PCRs")
 
 if re.search("No such file",run["output"]):
-    vtpm_cleanup(domName)
     FAIL("TPM frontend support not compiled into (domU?) kernel")
 
 consoleHistory = console.getHistory()
@@ -58,12 +57,10 @@ while loop < 3:
                                       timeout=90)
     except TimeoutError, e:
         saveLog(consoleHistory)
-        vtpm_cleanup(domName)
         FAIL(str(e))
 
     if status != 0:
         saveLog(consoleHistory)
-        vtpm_cleanup(domName)
         FAIL("xm migrate did not succeed. External device migration activated?")
 
 
@@ -71,26 +68,22 @@ while loop < 3:
     new_domid = domid(domName)
 
     if (old_domid == new_domid):
-        vtpm_cleanup(domName)
         FAIL("xm migrate failed, domain id is still %s (loop=%d)" %
              (old_domid,loop))
 
     try:
         console = domain.getConsole()
     except ConsoleError, e:
-        vtpm_cleanup(domName)
         FAIL(str(e))
 
     try:
         run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
     except ConsoleError, e:
         saveLog(console.getHistory())
-        vtpm_cleanup(domName)
         FAIL("No result from dumping the PCRs")
 
     if not re.search("PCR-00:",run["output"]):
         saveLog(console.getHistory())
-        vtpm_cleanup(domName)
         FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side")
 
     loop += 1
@@ -98,5 +91,3 @@ while loop < 3:
 domain.closeConsole()
 
 domain.stop()
-
-vtpm_cleanup(domName)
index 77a216cf165205e128e4a47b986d5fd6b2753c95..c70691d8e7565332404f6732e2409f2537984b7b 100644 (file)
@@ -13,6 +13,7 @@ from vtpm_utils import *
 import commands
 import os
 import os.path
+import atexit
 
 config = {"vtpm":"instance=1,backend=0"}
 domain = XmTestDomain(extraConfig=config)
@@ -24,45 +25,40 @@ try:
 except DomainError, e:
     if verbose:
         print e.extra
-    vtpm_cleanup(domName)
     FAIL("Unable to create domain (%s)" % domName)
 
+atexit.register(vtpm_cleanup, vtpm_get_uuid(domid(domName)))
+
 try:
     console.sendInput("input")
 except ConsoleError, e:
     saveLog(console.getHistory())
-    vtpm_cleanup(domName)
     FAIL(str(e))
 
 try:
     run = console.runCmd("mknod /dev/tpm0 c 10 224")
 except ConsoleError, e:
     saveLog(console.getHistory())
-    vtpm_cleanup(domName)
     FAIL("Error while creating /dev/tpm0")
 
 try:
     run = console.runCmd("echo -ne \"\\x00\\xc1\\x00\\x00\\x00\\x22\\x00\\x00\\x00\\x14\\x00\\x00\\x00\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\x09\\x0a\\x0b\\x0c\\x0d\\x0e\\0xf\\x10\\x11\\x12\\x13\\x14\" > seq; cat seq > /dev/tpm0")
 except ConsoleError, e:
     saveLog(console.getHistory())
-    vtpm_cleanup(domName)
     FAIL("Error while extending PCR 0")
 
 try:
     run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
 except ConsoleError, e:
     saveLog(console.getHistory())
-    vtpm_cleanup(domName)
     FAIL("No result from dumping the PCRs")
 
 
 if re.search("No such file",run["output"]):
-    vtpm_cleanup(domName)
     FAIL("TPM frontend support not compiled into (domU?) kernel")
 
 if not re.search("PCR-00:",run["output"]):
     saveLog(console.getHistory())
-    vtpm_cleanup(domName)
     FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side: \n%s" % run["output"])
 
 if not re.search("PCR-00: 1E A7 BD",run["output"]):
@@ -81,12 +77,10 @@ while loop < 3:
 
     except TimeoutError, e:
         saveLog(consoleHistory)
-        vtpm_cleanup(domName)
         FAIL(str(e))
 
     if status != 0:
         saveLog(consoleHistory)
-        vtpm_cleanup(domName)
         FAIL("xm save did not succeed")
 
     try:
@@ -96,37 +90,31 @@ while loop < 3:
     except TimeoutError, e:
         os.remove("%s.save" % domName)
         saveLog(consoleHistory)
-        vtpm_cleanup(domName)
         FAIL(str(e))
 
     os.remove("%s.save" % domName)
 
     if status != 0:
         saveLog(consoleHistory)
-        vtpm_cleanup(domName)
         FAIL("xm restore did not succeed")
 
     try:
         console = domain.getConsole()
     except ConsoleError, e:
-        vtpm_cleanup(domName)
         FAIL(str(e))
 
     try:
         run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
     except ConsoleError, e:
         saveLog(console.getHistory())
-        vtpm_cleanup(domName)
         FAIL(str(e))
 
     if not re.search("PCR-00:",run["output"]):
         saveLog(console.getHistory())
-        vtpm_cleanup(domName)
         FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side")
 
     if not re.search("PCR-00: 1E A7 BD",run["output"]):
         saveLog(console.getHistory())
-        vtpm_cleanup(domName)
         FAIL("Virtual TPM lost PCR 0 value: \n%s" % run["output"])
 
     loop += 1
@@ -135,5 +123,3 @@ domain.closeConsole()
 
 domain.stop()
 
-vtpm_cleanup(domName)
-
index 0f59677f7d19ea4f91ba856af3bb2be252b71c11..4ff33600a0fddbf9f0c770cb679426d7b0a6758e 100644 (file)
@@ -14,6 +14,7 @@ from vtpm_utils import *
 import commands
 import os
 import os.path
+import atexit
 
 config = {"vtpm":"instance=1,backend=0"}
 domain = XmTestDomain(extraConfig=config)
@@ -25,45 +26,40 @@ try:
 except DomainError, e:
     if verbose:
         print e.extra
-    vtpm_cleanup(domName)
     FAIL("Unable to create domain (%s)" % domName)
 
+atexit.register(vtpm_cleanup, vtpm_get_uuid(domid(domName)))
+
 try:
     console.sendInput("input")
 except ConsoleError, e:
     saveLog(console.getHistory())
-    vtpm_cleanup(domName)
     FAIL(str(e))
 
 try:
     run = console.runCmd("mknod /dev/tpm0 c 10 224")
 except ConsoleError, e:
     saveLog(console.getHistory())
-    vtpm_cleanup(domName)
     FAIL("Error while creating /dev/tpm0")
 
 try:
     run = console.runCmd("echo -ne \"\\x00\\xc1\\x00\\x00\\x00\\x22\\x00\\x00\\x00\\x14\\x00\\x00\\x00\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\x09\\x0a\\x0b\\x0c\\x0d\\x0e\\0xf\\x10\\x11\\x12\\x13\\x14\" > seq; cat seq > /dev/tpm0")
 except ConsoleError, e:
     saveLog(console.getHistory())
-    vtpm_cleanup(domName)
     FAIL("Error while extending PCR 0")
 
 try:
     run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
 except ConsoleError, e:
     saveLog(console.getHistory())
-    vtpm_cleanup(domName)
     FAIL("No result from dumping the PCRs")
 
 
 if re.search("No such file",run["output"]):
-    vtpm_cleanup(domName)
     FAIL("TPM frontend support not compiled into (domU?) kernel")
 
 if not re.search("PCR-00:",run["output"]):
     saveLog(console.getHistory())
-    vtpm_cleanup(domName)
     FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side: \n%s" % run["output"])
 
 if not re.search("PCR-00: 1E A7 BD",run["output"]):
@@ -83,12 +79,10 @@ while loop < 3:
                                       timeout=90)
     except TimeoutError, e:
         saveLog(consoleHistory)
-        vtpm_cleanup(domName)
         FAIL(str(e))
 
     if status != 0:
         saveLog(consoleHistory)
-        vtpm_cleanup(domName)
         FAIL("xm migrate did not succeed. External device migration activated?")
 
 
@@ -96,31 +90,26 @@ while loop < 3:
     new_domid = domid(domName)
 
     if (old_domid == new_domid):
-        vtpm_cleanup(domName)
         FAIL("xm migrate failed, domain id is still %s (loop=%d)" %
              (old_domid,loop))
 
     try:
         console = domain.getConsole()
     except ConsoleError, e:
-        vtpm_cleanup(domName)
         FAIL(str(e))
 
     try:
         run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
     except ConsoleError, e:
         saveLog(console.getHistory())
-        vtpm_cleanup(domName)
         FAIL("No result from dumping the PCRs")
 
     if not re.search("PCR-00:",run["output"]):
         saveLog(console.getHistory())
-        vtpm_cleanup(domName)
         FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side")
 
     if not re.search("PCR-00: 1E A7 BD",run["output"]):
         saveLog(console.getHistory())
-        vtpm_cleanup(domName)
         FAIL("Virtual TPM lost PCR 0 value: \n%s" % run["output"])
 
     loop += 1
@@ -128,5 +117,3 @@ while loop < 3:
 domain.closeConsole()
 
 domain.stop()
-
-vtpm_cleanup(domName)
index 2061992f6489d51931aa7f7728d15111a9f18293..27125fca447494d286eb3275a7748d77eee5c6f1 100644 (file)
@@ -14,6 +14,7 @@ from vtpm_utils import *
 import commands
 import os
 import os.path
+import atexit
 
 config = {"vtpm":"instance=1,backend=0"}
 domain = XmTestDomain(extraConfig=config)
@@ -25,45 +26,40 @@ try:
 except DomainError, e:
     if verbose:
         print e.extra
-    vtpm_cleanup(domName)
     FAIL("Unable to create domain (%s)" % domName)
 
+atexit.register(vtpm_cleanup, vtpm_get_uuid(domid(domName)))
+
 try:
     console.sendInput("input")
 except ConsoleError, e:
     saveLog(console.getHistory())
-    vtpm_cleanup(domName)
     FAIL(str(e))
 
 try:
     run = console.runCmd("mknod /dev/tpm0 c 10 224")
 except ConsoleError, e:
     saveLog(console.getHistory())
-    vtpm_cleanup(domName)
     FAIL("Error while creating /dev/tpm0")
 
 try:
     run = console.runCmd("echo -ne \"\\x00\\xc1\\x00\\x00\\x00\\x22\\x00\\x00\\x00\\x14\\x00\\x00\\x00\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\x09\\x0a\\x0b\\x0c\\x0d\\x0e\\0xf\\x10\\x11\\x12\\x13\\x14\" > seq; cat seq > /dev/tpm0")
 except ConsoleError, e:
     saveLog(console.getHistory())
-    vtpm_cleanup(domName)
     FAIL("Error while extending PCR 0")
 
 try:
     run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
 except ConsoleError, e:
     saveLog(console.getHistory())
-    vtpm_cleanup(domName)
     FAIL("No result from dumping the PCRs")
 
 
 if re.search("No such file",run["output"]):
-    vtpm_cleanup(domName)
     FAIL("TPM frontend support not compiled into (domU?) kernel")
 
 if not re.search("PCR-00:",run["output"]):
     saveLog(console.getHistory())
-    vtpm_cleanup(domName)
     FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side: \n%s" % run["output"])
 
 if not re.search("PCR-00: 1E A7 BD",run["output"]):
@@ -83,12 +79,10 @@ while loop < 3:
                                       timeout=90)
     except TimeoutError, e:
         saveLog(consoleHistory)
-        vtpm_cleanup(domName)
         FAIL(str(e))
 
     if status != 0:
         saveLog(consoleHistory)
-        vtpm_cleanup(domName)
         FAIL("xm migrate did not succeed. External device migration activated?")
 
 
@@ -96,31 +90,26 @@ while loop < 3:
     new_domid = domid(domName)
 
     if (old_domid == new_domid):
-        vtpm_cleanup(domName)
         FAIL("xm migrate failed, domain id is still %s (loop=%d)" %
              (old_domid,loop))
 
     try:
         console = domain.getConsole()
     except ConsoleError, e:
-        vtpm_cleanup(domName)
         FAIL(str(e))
 
     try:
         run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
     except ConsoleError, e:
         saveLog(console.getHistory())
-        vtpm_cleanup(domName)
         FAIL("No result from dumping the PCRs")
 
     if not re.search("PCR-00:",run["output"]):
         saveLog(console.getHistory())
-        vtpm_cleanup(domName)
         FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side")
 
     if not re.search("PCR-00: 1E A7 BD",run["output"]):
         saveLog(console.getHistory())
-        vtpm_cleanup(domName)
         FAIL("Virtual TPM lost PCR 0 value: \n%s" % run["output"])
 
     loop += 1
@@ -128,5 +117,3 @@ while loop < 3:
 domain.closeConsole()
 
 domain.stop()
-
-vtpm_cleanup(domName)
index da65aab5fb24154f8e7746be5ff5822ef992fddf..4e5b281bb82b2d63843dd4e66df8e6c9592af073 100644 (file)
@@ -15,4 +15,16 @@ if output == "":
          "need /dev/tpm0")
 
 def vtpm_cleanup(domName):
-    traceCommand("/etc/xen/scripts/vtpm-delete %s" % domName)
+    traceCommand("/etc/xen/scripts/vtpm-delete "
+                 "`xenstore-read /local/domain/0/backend/vtpm/%s/0/uuid`" %
+                 str(domid(domName)))
+
+def vtpm_cleanup(uuid):
+    from xen.xm import main
+    if main.serverType != main.SERVER_XEN_API:
+        traceCommand("/etc/xen/scripts/vtpm-delete %s" % uuid)
+
+def vtpm_get_uuid(domainid):
+    s, o = traceCommand("xenstore-read "
+                        "/local/domain/0/backend/vtpm/%s/0/uuid" % domainid)
+    return o